// 商品路由表

// 加载模块
let express = require('express');
let https = require('https');
let path  = require('path');
let goodsModel = require('../db/models/goodsModel.js');

// 创建路由表(空表)
let router = express.Router();

// 向路由表添加内容:

// 添加商品接口
router.post('/add',(req,res)=>{
    // 获取参数
    let {name,price,desc,count,type,imgurl} = req.body;

    // 空值判断
    if (!name || !price || !desc || !count || !type || !imgurl) {
        return res.send({"code":-1,"msg":"商品信息不能为空！"});
    }

    // 先查询数据库，判断当前添加的商品是否已存在
    goodsModel.find({name})
    .then((arr)=>{
        if (arr.length === 0) {
            // 数据库没有当前要添加的商品，可以添加数据
            return goodsModel.insertMany({name,price,desc,count,type,imgurl});
        } else {
            // 数据库已有当前要添加的商品，不添加数据
            res.send({"code":-2,"msg":"当前商品已存在！"});
            return new Promise(()=>{});// 终止链式调用
        }
    })
    .then(()=>{
        res.send({"code":1,"msg":"商品添加成功！"});
    })
    .catch((err)=>{
        res.send({"code":0,"msg":err});
    });
});

// 删除商品接口
router.post('/del',(req,res)=>{
    // 获取参数
    let {name} = req.body;

    // 删除数据
    goodsModel.deleteOne({name})
    .then((result)=>{
        if (result.deletedCount === 1) {
            // 删除成功
            res.send({"code":1,"msg":"删除成功"});
        } else {
            // 没有该数据
            res.send({"code":-1,"msg":"没有该条数据"});
        }
    })
    .catch((err)=>{
        res.send({"code":0,"msg":err});
    })
});

// 修改商品数据
router.post('/update',(req,res)=>{
    // 获取参数
    let {oname,name,price,desc,type,count,imgurl} = req.body;

    // 修改数据
    goodsModel.updateOne({name:oname},{$set:{name,price,desc,type,count,imgurl}})
    .then((result)=>{
        if (result.modifiedCount === 1) {
            // 修改成功
            res.send({"code":1,"msg":"修改成功"});
        } else {
            // 找不到要修改的数据
            res.send({"code":-1,"msg":"找不到要修改的数据"});
        }
    })
    .catch((err)=>{
        res.send({"code":0,"msg":"修改失败"});
    })
})

// 分页查询接口
router.get('/getpage',(req,res)=>{
    // 获取参数
    let {page=1,size=4} = req.query;
    // page 第几页，默认第1页
    // size 每页几条，默认4条
    let count = 0;// 记录总条数
    let pages = 0;// 记录总页数

    // 查询所有数据
    goodsModel.find()
    .then((arr)=>{
        count = arr.length;
        pages = Math.ceil(count/size);

        // 假设前端传过来的参数为：page=2  size=5 如何给前端返回数据？
        // find()查询所有数据
        // limit(x)限制查询x条数据
        // skip(index)从索引为index的位置开始查询数据
        // 第一页：.limit(5).skip(0)
        // 第二页：.limit(5).skip(5)
        // 第三页：.limit(5).skip(10)
        // 。。。
        // 第page页：.limit(size).skip((page-1)*size)
        return goodsModel.find().limit(Number(size)).skip((page-1)*size);
    })
    .then((arr)=>{
        res.send({"code":1,"msg":"查询成功","data":arr,"pages":pages,"count":count});
    })
    .catch((err)=>{
        res.send({"code":0,"msg":err,"data":[],"pages":0,"count":0});
    })
})

// 关键字查询（模糊查询）
router.get('/search',(req,res)=>{
    // 获取参数
    let {page=1,size=4,wd} = req.query;
    // page 记录页码
    // size 记录条数
    let pages = 0;// 记录总页数
    let count = 0;// 记录总条数

    // 匹配关键字的正则
    // let reg = /wd/;// 匹配wd这个字符串
    let reg = new RegExp(wd);// 匹配wd这个变量对应的字符串

    //根据关键字查询数据
    goodsModel.find({$or:[{name:{$regex:reg}},{price:{$regex:reg}},{desc:{$regex:reg}},{type:{$regex:reg}}]})
    .then(arr=>{
        if (arr.length === 0) {
            res.send({"code":-1,"msg":"暂无数据","data":[],"pages":0,"count":0});
        } else {
            count = arr.length;
            pages = Math.ceil(count/size);

            let arr2 = arr.splice((page-1)*size,size);
            res.send({"code":1,"msg":"查询成功","data":arr2,"pages":pages,"count":count});
        }
    })
    .catch((err)=>{
        res.send({"code":0,"msg":err,"data":[],"pages":0,"count":0});
    })
})

// 上传文件接口：

// 加载模块
let multer = require('multer');

// 生成upload接收器
let upload = multer({
    limits: {
        // 限制上传文件最大为500kb（超出会报错）
        fileSize: 1024*500
    },
    fileFilter: function (req,file,cb){
        // 要求：只接收图片文件
        let reg = /\.(png|gif|jpe?g|svg)$/;
        if (reg.test(file.originalname)) {
            cb(null,true);// 接收文件
        } else {
            cb(null,false);// 拒收文件
        }
    },
    storage: multer.diskStorage({
        destination: function (req,file,cb){
            cb(null,'./www/uploads');
        },
        filename: function (req,file,cb){
            let file_name = 'upload_'+Date.now()+'_'+parseInt(Math.random()*100000);
            let hzm = path.extname(file.originalname);// '.png'
            cb(null,file_name+hzm);
        }
    })
});

// 接收单个文件
let fn = upload.single('filen');

router.post('/upload',(req,res)=>{
    fn(req,res,(err)=>{
        // 如果没有错误err为null，有错误err为错误对象
        if (err) {
            // 上传文件超出最大范围会报错
            return res.send({"code":-1,"msg":"上传图片最大为500kb"});
        }
        if (!req.file) {
            // 拒收文件时，req.file的值为undefined
            return res.send({"code":-2,"msg":"只能上传图片文件"});
        }
        res.send({"code":1,"msg":"图片上传成功","imgurl":"http://localhost:9999/static/uploads/"+req.file.filename});
    });
});

// 导出路由表
module.exports = router;
